23

» WarCraft 3 / Модель постройки здания

Похожие вопросы:

ответ
LongbowMan, могу предложить лишь попробовать пересвязать вершины с костью либо создать несколько костей и попривязывать часть вершин к одной, часть к другой, часть к третьей и т. д. Если не поможет, удали сбояющую аниму и создай заново.
Хотя и это может не помочь, ибо модель действительно очень тяжелая.
ответ
Это код аттачмента в модели.
Добавлять надо свой через war3modeleditor, и там указывать нужные пути и видимость (т.е. в каком диапазоне кадров этот аттач видно)
Вот охотничий зал, аттач BirthLink
Видимость у него включается (1) в кадре 3333, когда начинается анимация birth, и выключается (0) в кадре 63333 где она заканчивается
ответ
В редакторе скелета
ответ
VinerX, это нужно только с одним зданием провернуть? Сейчас карту сделаю.
А вот и карта. Всё описание внутри.
ответ
~8gabriel8:
Считаю, лучше отредактировать модель.
Вот в эту тему кинь её xgm.guru/p/wc3/wc3-ne-rabotaet-mdx

23

» WarCraft 3 / Ландшафт

Похожие вопросы:

ответ
Прикреплю торренты для нормального WC3. Также скачай JNPG:R с XGM, обнови pjass.exe и TESH.

Решение твое проблемы:
Ты делаешь кратер в точке X шириной Y и глубиной Z. Чтобы после его убрать, нужно сделать кратер в точке Х шириной Y и глубиной -Z.
ответ
ну. на.
ответ
Самоотсос.
Ответ дал создатель кампании, через we enhancer

23

» WarCraft 3 / Перестали работать триггеры

Похожие вопросы:

ответ
Сначала попробуй перенести все триги в другую карту, если в другой мапе все работает - проблема не в тригах, если всеже в тригах - удаляй по очереди, категориями, выясняй из-за каких не работает. Это проблема частного триггера\переменной. Чаще всего так.
ПЫСЫ не забывай бэкапить карту
ответ
Но ведь сами по себе ошибки не происходят.
Причина подобного это А) - невнимательность либо твоя либо автора В) - программное обеспечение
Что бы в дальнейшем все было окей, просто сначала потести карту полностью что бы знать что и как должно быть, а потом вноси изменения, будь внимательней.
Еще советую связаться с автором и поговорить с ним об этой проблеме, или запросить у него еще 1 исходник да бы сверЯться с ним.
ответ
XGM Bot:
Похожие вопросы:

ответ
Сначала попробуй перенести все триги в другую карту, если в другой мапе все работает - проблема не в тригах, если всеже в тригах - удаляй по очереди, категориями, выясняй из-за каких не работает. Это проблема частного триггера\переменной. Чаще всего так.
ПЫСЫ не забывай бэкапить карту
ответ
вопросы типа сделайте за меня не принимаются
по поводу того как это делать написано здесь xgm.guru/p/wc3/articles
ответ
unsinkable78, один из вариантов это большое количество однотипных триггеров с периодом
объедении их в 1
а лучше используй таймер вместо триггеров
unsinkable78, так же вероятно проблема в твоих массивах
ты судя по всему задаёшь им размер в 1000
из за чего при запуске игры твой массив заполняется ненужными значениями что забивает память и может приводить к лимиту потока (в вар3 у потока/триггера есть максимальное количество операций которые он может выполнить)
вот пример из твоего j файла
set i = 0
    loop
        exitwhen (i > 1000)
        set udg_squad[i] = CreateGroup()
        set i = i + 1
    endloop
этот код циклом от 0 до 1000 создаёт группы(1000 групп соответственно) и заносит их в массив squad
это тратит более 1000 операций
и таких моментов много
так же я видел места где ты использовал массивы вместо обычных переменных что тоже увеличивает затраты ресурсов и может приводить к лимиту потока
массивы нужно использовать лишь там где без них не обойтись
ответ
Возможно что в каком то триггере не объявил глобальную переменную. Т.е. group g, когда правильно будет group g=null or group g=CreateGroup() если же real or integer то =0
P.S.Сам с этим не раз сталкивался
ответ
Но ведь сами по себе ошибки не происходят.
Причина подобного это А) - невнимательность либо твоя либо автора В) - программное обеспечение
Что бы в дальнейшем все было окей, просто сначала потести карту полностью что бы знать что и как должно быть, а потом вноси изменения, будь внимательней.
Еще советую связаться с автором и поговорить с ним об этой проблеме, или запросить у него еще 1 исходник да бы сверЯться с ним.

ответ
Мой внутренний экстрасенс говорит, что скорее всего вы где-то превысили лимит операций. Более потробно можно сказать только имея карту (ваш Кэп).

23

» WarCraft 3 / Синхронизация

Похожие вопросы:

ответ
когда игроки подгрузили данные из прелоада и синхронизировали их то устанавливаем им флаг загрузил
а потом просто сохраняем всё что надо у тех у кого нету флага
подробнее в статье про прелоад
данные надо синхронить со всеми иначе десинк
ответ
Разработчики игры не доделали синхронизацию строк. Тебе придется искать обходные пути.
ответ
если длинно, то вот
рандом в сетевых, да и не только, играх - всегда псевдорандом, т.к. события происодят у всех, счетчик рандома всегда синхронен
blog.d1stats.ru/blog/dm/214.html о чё писал, тоже немного есть
ответ
как-то делается, но тонкостей дохера - нельзя иметь регионы на карте, чтобы это работало, нельзя иметь события на unitInRange, и тд. и тп. Проще говоря - обломись, дешевле сделать статичный магаз где-то в неиспользуемой зоне
ответ
здесь можно разделить нужные задачи на 2 категории:
  1. работа с игровыми объектами (юниты, разрушаемые объекты, таймеры и т.д)
  2. работа с визуальным отображением (положение камеры, интерфейс, и т.д)

В первом случае если не синхронизировать данные - то будет десинхрон
А во втором случае можно как угодно шаманить с GetLocalPlayer()

Если надо каждому игроку вывести координаты его мышки:
call BJDebugMsg(R2S(GetMouseX())+" - "+R2S(GetMouseY()))
//У каждого игрока на экране будут свои координаты мышки

Если надо определенному игроку вывести координаты его мышки:
if( GetLocalPlayer() == p ) then
	call BJDebugMsg(R2S(GetMouseX())+" - "+R2S(GetMouseY()))
endif
//У игрока "p" на экране будут выведены координаты его мышки

Если надо определенному игроку создать спецэффект:
local string s = ""
if( GetLocalPlayer() == p ) then
	set s = "effect.mdx"
endif
call AddSpecialEffect(s, x, y)
//Игроку "p" будет создан спецэффект в координатах x,y (спецэффект не будет виден другим игрокам)

А вот если нужно будет создать юнита в координатах мышки игрока:
call SyncReal(p, GetMouseX(), GetMouseY())
call CreateUnit(p, 'hfoo', sync_x, sync_y, 270.)
//Игроку "p" будет создан пехотинец в координатах его мышки
//Функцию SyncReal смотри в статье GetLocalPlayer(), но надо будет чуть её дополнить, чтобы она писала синхронизированные значение в глобалки sync_x, sync_y
//Ну и как говорилось выше - для синхронизации требуется время

23

» WarCraft 3 / Как избавиться от утечки?

Похожие вопросы:

ответ
Порождать утечку может только объект, чей тип наследует тип handle.
Такие типы как:
  • boolean
  • integer
  • real
  • string
являются базовыми и утечек не порождают. Все остальные типы (unit, group, timer, multiboard и т.д.) являются наследниками типа handle и могут вызывать утечки.
Подробнее тут:
и тут:
Исключением из правил является тип player. Так как игроки существуют на протяжении всей игры, так как они не уничтожаются и не удаляются, являются постоянным объектом существующим на протяжении всей игры, утечек они не порождают.
ответ
FrigatPlay, с этим я согласен, т.к. статья рассчитана на того кто шарит в программировании
используя только средства гуи от утечек не избавится т.к. гуи сделано из утечек
это как пытаться убрать из кирпичного дома все кирпичи
ответ
Переменная "точка" это не просто два числа.
Она хранит объект - ссылку на место в памяти, где хранятся эти два числа.
Пока ты не вызовешь RemoveLocation, эта точка будет висеть в памяти.
Когда ты присваиваешь переменной новое значение, старый объект не удален, но появляется новый объект с другими координатами, и твой триггер создает 200 точек в секунду.
Чтобы поменять координаты не создавая новый объект, есть функция MoveLocation
ответ
range * Cos(a * bj_DEGTORAD)
должно получится так:
a = Atan2(endfly_y - GetUnitY(suriken), endfly_x - GetUnitX(suriken))
SetUnitX(suriken, GetUnitX(suriken) + 20.00 * Cos(a))
SetUnitY(suriken, GetUnitY(suriken) + 20.00 * Sin(a))

23

» WarCraft 3 / Как избавиться от утечки?

Похожие вопросы:

ответ
Порождать утечку может только объект, чей тип наследует тип handle.
Такие типы как:
  • boolean
  • integer
  • real
  • string
являются базовыми и утечек не порождают. Все остальные типы (unit, group, timer, multiboard и т.д.) являются наследниками типа handle и могут вызывать утечки.
Подробнее тут:
и тут:
Исключением из правил является тип player. Так как игроки существуют на протяжении всей игры, так как они не уничтожаются и не удаляются, являются постоянным объектом существующим на протяжении всей игры, утечек они не порождают.
ответ
FrigatPlay, с этим я согласен, т.к. статья рассчитана на того кто шарит в программировании
используя только средства гуи от утечек не избавится т.к. гуи сделано из утечек
это как пытаться убрать из кирпичного дома все кирпичи
ответ
Переменная "точка" это не просто два числа.
Она хранит объект - ссылку на место в памяти, где хранятся эти два числа.
Пока ты не вызовешь RemoveLocation, эта точка будет висеть в памяти.
Когда ты присваиваешь переменной новое значение, старый объект не удален, но появляется новый объект с другими координатами, и твой триггер создает 200 точек в секунду.
Чтобы поменять координаты не создавая новый объект, есть функция MoveLocation
ответ
range * Cos(a * bj_DEGTORAD)
должно получится так:
a = Atan2(endfly_y - GetUnitY(suriken), endfly_x - GetUnitX(suriken))
SetUnitX(suriken, GetUnitX(suriken) + 20.00 * Cos(a))
SetUnitY(suriken, GetUnitY(suriken) + 20.00 * Sin(a))

23

» WarCraft 3 / Альтернативная форма юнита!

Похожие вопросы:

ответ
Так ты не объяснил , почему Иллидан быстро превращается , хотя стоит задержка "0" , а у моих то же "0" .
Вот ошибка скрин , там нужно 0 поставить . . .
ответ
Мб оно связано с морфом, или с какими то параметрами заклинания - в доте аватар превращал тинкера в танк..
Можно попробовать морфнутся в альтернативного тинкера скиллом 'Aave' - превратится в сфинкса, тогда он навсегда останется тинкером в ульте.
ответ
Poma, CustomScript: call RemoveAbility(udg_твой_юнит, 'AUbu')
вызывать после морфа

23

» WarCraft 3 / По поводу зданий...

Похожие вопросы:

ответ
Хозяин Миров, боже
делаем дами ауру
потом всем у кого есть баф ауры даём бонусы скрытым спелбуком
когда баф исчезает убираем бонусы
ответ
У зданий физ размер нужен только для галочки и взаимодействия со спеллами, сама проходимость определяется картой путей здания, если поставить карту путей портала то сквозь здание можно будет ходить но на этом месте нельзя будет строить...
ответ
~8gabriel8:
PT153, это лимит для одного игрока, то есть героя смогут нанять другие.
Нужно поставить таверне способность Продажа войск. Потом делаешь триггер:
Событие: Юнит вошёл в область (Вся игровая карта)
Условие: Триггеринг юнит равно Герой равно Да (можно этого не делать, просто исключает срабатывание триггера для каждого юнита)
Действия: несколько действий Если/То/Иначе
Если - Юнит тип (Триггеринг юнит) равно Какой-то Герой Из Таверны
То - Нейтральное здание - Удалить Какой-то Герой Из Таверны из таверны
Иначе - Ничего
И так для каждого типа героев в таверне.

23

» WarCraft 3 / Изменить название карты

Похожие вопросы:

ответ
Farrien, для начала бж красные
Farrien, и почитай статьи
а то твой код ужасен
и не цитируй весь комментарий если отвечаешь лишь на его часть
а то сложно понять на что именно ты отвечаешь
чтобы цитировать часть комментария выдели текст который надо цитировать и нажми кнопку цитировать
ответ
vlad2010pilot, как изменить текст Предметы я уже написал.
А то что ты хочешь изменить (Меню паузы или Таблица рекордов) лежит:
Граница - UI\Widgets\EscMenu\Human\editbox-border.blp
Кнопка развертывания - UI\Widgets\Glues\Gluescreen-Scrollbar-DownArrow.blp
Кнопка сворачивания - UI\Widgets\Glues\Gluescreen-Scrollbar-UpArrow.blp
Фон - UI\Widgets\EscMenu\Human\editbox-background.blp
ответ
Работает только оригинал , точнее с него настройки на все остальные идут клоны спелла, настройки смотри в опен доте, так то она работ, но вот орб и ннсовместтмость с другими пассивками, это не очень.

23

» WarCraft 3 / Импорт текста

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
Оба файла удаляются, потому что ты импортируешь их в карту через программу и не добавляешь данные о файлах в файл импорта(war3map.imp). При сохранении карты в редакторе архив пересобирается, и в него добавляются сторонние файлы, которые сохранены в том самом файле импорта. Поэтому используй стандартный менеджер импорта в редакторе.
ответ
Крашлог и карту желательно, мб где то пропустили скобку?

23

» WarCraft 3 / Заклинание невидимости

Принятый ответ
Похожие вопросы:

ответ
Я тебе вот что скажу... Играю в Варик с 2006 года.
Короче ща перешёл в Гарену из-за того, что батл нете нельзя нормально хостить карту (там одни боты).
В общем: народу в гарене полно(комнаты почти всегда забыты по максимому). И что странно - половина из игроков - школьники... Откуда столько много школьников мне не понятно.
Но одно могу сказать точно - в Варик 3 играет больше народу, чем в Старкрафт 2. И будут играть ещё долго.
А я думал, что к 2010 году в варике 3 ТОЧНО никого не останется... Оказывается я жестко ошибался)

23

» WarCraft 3 / Модель не отображается в карте.

Похожие вопросы:

ответ
vipsasTRATEGic, посмотри путь к тестурам через MPQ браузер,который находится в Model Editore.Раньше у меня такая же проблема была,но нашёл этот способ.Временами, правда , надоедает постоянно в Model Editor лезть, но зато эффективно.
Или можешь пыаться в пути написать Textures . Это самый частоиспользуемый путь для текстур
ответ
советую переименовать модель\заребутить комп
текстуры стандартные юзал, я так понимаю
ответ
Они не прописаны в списке моделей для редактора... попробуй вручную изменять путь.
ответ
здесь может быть что угодно, предположу, что только свежий варкрафт вылечит.
ответ
~8gabriel8:
У тебя не те пути указаны для импорта. Стоят пустые пути, а надо UI\Glues\MainMenu\MainMenu3d_exp\ перед именем файла поставить. Странно, что у тебя нормально открывалось. Наверное, ты у себя в нужном месте на ПК эти *.blp держал.
P. S. Дракон ничего так)
P. P. S. Очень долго решался этот вопрос, почти неделю. Сама судьба привела меня к нему) Хотел первому комментатору плюсов отсыпать за то, что незаслуженно ему на минус ткнул, и попался этот вопрос.

23

» WarCraft 3 / Выбор сложности для 1 игрока

Похожие вопросы:

ответ
Name Legion:
первый и второй скрины - ты создаешь юнита "Выбирайте героя" для каждого игрока, потом накидываешь игроку-владельцу выборку. Так понял? ДА ВСЕ ПРАВИЛЬНО
третий и четвертый скрины - это один триггер? ДА
при создании (входе в игровую карту) юнита ты показываешь диалог одному игроку (при входе в эту область) я показываю диалог этому игроку!!!!
пятый скрин - здесь при нажатий диалоговой кнопки ты что-то делаешь. Скорее всего проблема в пике. ДА проблема в пике
дебаг тут не нужен...я и так понимаю где он останавливается а где идет дальше..я хочу узнать как создать этого выбирайте героя, выбрать этого выбирайте героя в этой области где я его создал добавить выбирайте героя в селекции для этого игрока и чтобы эти 2 триггера правильно работали
avuremybe:
я не пойму откуда все эти куски кода
куски...объясняю....первые 2 это идет создание выбирайте героя для всех игроков... 3 4 это один триггер и 5 это отдельный триггер
вот так выглядит он
и вот так для всех остальных игроков
а так выглядит 2 триггер
Хотя не понятно. Где фильтр? Ты хотя бы условием отсеивал, или проверял бы. Сделал бы так, что на каждого пикнутого юнита накидывать на него выбор владельца. где дебаг?
и вот как это сделать...покажи условием
решил вопрос....проблема была в том что я выбирал только что созданного юнита...за счет этого на первые 2 показано что last created unit = выбирайте героя...он думал что только что созданный юнит не герой а выбирайте героя..потому и переключался выбор
теперь в выборе уровня сложности стоит условие
спасибо

23

» WarCraft 3 / Какой патч лучше?

Похожие вопросы:

ответ
Я тебе вот что скажу... Играю в Варик с 2006 года.
Короче ща перешёл в Гарену из-за того, что батл нете нельзя нормально хостить карту (там одни боты).
В общем: народу в гарене полно(комнаты почти всегда забыты по максимому). И что странно - половина из игроков - школьники... Откуда столько много школьников мне не понятно.
Но одно могу сказать точно - в Варик 3 играет больше народу, чем в Старкрафт 2. И будут играть ещё долго.
А я думал, что к 2010 году в варике 3 ТОЧНО никого не останется... Оказывается я жестко ошибался)

23

» WarCraft 3 / Проблема с переводом карты

Похожие вопросы:

ответ
Tand, под кодировкой я имею в виду кодировку. Есть такая штука, определяет какими комбинациями нулей и едениц в бинарном виде кодируется каждый символ. Если при сохранении использована не та кодировка, которую понимает игра, то игра, соответственно, неможет сопоставить нулям и еденицам из файла конкретные символы, а значит ничего не показывает или показывает совсем не то, что было написано изначально.
Скачай Notepad++ -встроенные в винду средства годятся разве что заметки о жизни офисного планктона писать.
ответ
Но ведь сами по себе ошибки не происходят.
Причина подобного это А) - невнимательность либо твоя либо автора В) - программное обеспечение
Что бы в дальнейшем все было окей, просто сначала потести карту полностью что бы знать что и как должно быть, а потом вноси изменения, будь внимательней.
Еще советую связаться с автором и поговорить с ним об этой проблеме, или запросить у него еще 1 исходник да бы сверЯться с ним.
ответ
Анимация кости базы при death сместилась у конечной точки в линейке анимации. Поправил. В игре потестил, работает. Рассчитать границы нужны когда делаешь новые или изменяешь старые анимации, одна из причин чтоб анимация не сместилась и была на своем месте. Но в твоем случае она сразу не помогла.
ответ
Скорее всего кривые руки, проверьте как следует пути к моделям.
микс архив - тоже самое что файлы в карте, если все правильно сделано, неважно конверт из вов это или нет.

23

» WarCraft 3 / Перевод карты

Похожие вопросы:

ответ
Пиши текст с начала в онлайн декодере , после перекодируй вот так:[UTF-8(русский текст)>CP1251(кодировка варика)] и результат вставь в карту.
ответ
Бордер, у меня уже давно валяется W3MLocalizer.exe , погугли, посмотри как работает, мб тебе подойдёт
ответ
XGM Bot:
Похожие вопросы:

ответ
Мне не тру. Подсказываю самый простой способ:
  • Для начала, стоит скачать карту, которую хочешь перевести. Очень важно, чтобы она была не на русском, иначе перевод карты теряет смысл.
  • Открыть карту в World Editor.
  • Если карта запротекчена, нужно воспользоваться программой по взлому. Их очень легко найти самостоятельно.
  • Карта открыта. Теперь можно переводить её. Для этого стоит пройтись по редактору объектов и игровому интерфейсу.
  • Если есть сложности с переводом, можно воспользоваться гугл-переводчиком. Но содержание углепластика в тексте карты резко возрастёт.
  • Сохраняем карту.
  • ???
  • PROFIT!
На правах капитана.
ответ
Пиши текст с начала в онлайн декодере , после перекодируй вот так:[UTF-8(русский текст)>CP1251(кодировка варика)] и результат вставь в карту.
ответ
Крашлог и карту желательно, мб где то пропустили скобку?
ответ
Бордер, у меня уже давно валяется W3MLocalizer.exe , погугли, посмотри как работает, мб тебе подойдёт
ответ
у каждого формата свой алгоритм,вот из за этого такая разница ,особенно на вес блп влияет прозрачность что лутше прозрачные места которые не затрагивает меш красить чёрным цветом

ответ
~8gabriel8:
Есть английская версия игры, там сразу будет видно, какие строки надо перевести, а какие достаточно откатить на стандарт.

23

» WarCraft 3 / Как проверить % 2

Похожие вопросы:

ответ
Nickol, а такой способ?
Игра с самим собой по локальной Сети (смотри здесь или здесь)
ответ
Steal nerves:
База данных. В базе будет записан каждый меч, точнее номер меча, при подборе запоминаем в custom value или в хэш-таблицу, или в переменную или еще как-нибудь. Если номер больше нуля, значит у героя есть меч.
Самое простое - при подборе меча, проверяем есть ли в инвентаре такой меч. В РО итема можно задать уровнями. Например, первый уровень - мечи и топоры, второй уровень - защита груди, ну и так далее. Циклом пробегаешь, и поверяешь предметы на уровень.
Можно логическую переменную использовать для запоминания (одна логическая переменная - мечи и топоры, вторая логическая - луки и арбалеты итд). При подборе одного меча, проверяешь логическую, если есть, то дропаешь нафиг.
В таких системах используют обычно сферу молнию, а можно ли проверять есть ли такая способность у героя? Если уровень способности > 0, значит держит меч
ищи в поиске, такое миллион раз задавали. ношение больше одного, больше одного и так далее.
ответ
Steal nerves:
ssbbssc, так вот эта функция LengthString() считает длину строки, а вот как это он сделает - другой вопрос. он хочет наверное с помощью чата типа денежку добавить
AntiMage, лови примеры. проверяй дебагом. Кстати пробелы тоже символы, русские буквы считают как за 2 символа. Все это написано в вложенном архиве. Короче как я узнал - дебагом.
ответ
Сравнение целых чисел. Уровень способности у юнита > 0.
ответ
Попробуй вот эту программу, у меня с неё всё работает. www.hiveworkshop.com/threads/unrealloader-universal-kloader.2784...

23

» WarCraft 3 / Выбор сложности!

Принятый ответ
Похожие вопросы:

ответ
Не юзай TriggerSleepAction и будет тебе счастье. Особенно когда юзаешь глобальные переменные, вполне вероятно, что конфликт
ответ
Name Legion:
первый и второй скрины - ты создаешь юнита "Выбирайте героя" для каждого игрока, потом накидываешь игроку-владельцу выборку. Так понял? ДА ВСЕ ПРАВИЛЬНО
третий и четвертый скрины - это один триггер? ДА
при создании (входе в игровую карту) юнита ты показываешь диалог одному игроку (при входе в эту область) я показываю диалог этому игроку!!!!
пятый скрин - здесь при нажатий диалоговой кнопки ты что-то делаешь. Скорее всего проблема в пике. ДА проблема в пике
дебаг тут не нужен...я и так понимаю где он останавливается а где идет дальше..я хочу узнать как создать этого выбирайте героя, выбрать этого выбирайте героя в этой области где я его создал добавить выбирайте героя в селекции для этого игрока и чтобы эти 2 триггера правильно работали
avuremybe:
я не пойму откуда все эти куски кода
куски...объясняю....первые 2 это идет создание выбирайте героя для всех игроков... 3 4 это один триггер и 5 это отдельный триггер
вот так выглядит он
и вот так для всех остальных игроков
а так выглядит 2 триггер
Хотя не понятно. Где фильтр? Ты хотя бы условием отсеивал, или проверял бы. Сделал бы так, что на каждого пикнутого юнита накидывать на него выбор владельца. где дебаг?
и вот как это сделать...покажи условием
решил вопрос....проблема была в том что я выбирал только что созданного юнита...за счет этого на первые 2 показано что last created unit = выбирайте героя...он думал что только что созданный юнит не герой а выбирайте героя..потому и переключался выбор
теперь в выборе уровня сложности стоит условие
спасибо
ответ
Если запускаемая сложность главы отличается от стандартной, то оставить так, как есть, а если нет - то попытаться считать то, что было записано в предыдущей главе (если не записано - сбросить к стандартной).
Вообще, сама функция не запускает уровень с какой-то сложностью. Она просто задает значение глобальной переменной:
Код функции
function SetNextLevelBJ takes string nextLevel returns nothing
    if (nextLevel == "") then
        set bj_changeLevelMapName = null
    else
        set bj_changeLevelMapName = nextLevel
    endif
endfunction
Если копать глубже, то вся проблема здесь:
Код функций
function CustomVictoryOkBJ takes nothing returns nothing
    if bj_isSinglePlayer then
        call PauseGame( false )
        // Bump the difficulty back up to the default.
        call SetGameDifficulty(GetDefaultDifficulty())
    endif

    if (bj_changeLevelMapName == null) then
        call EndGame( bj_changeLevelShowScores )
    else
        call ChangeLevel( bj_changeLevelMapName, bj_changeLevelShowScores )
    endif
endfunction

function CustomVictoryQuitBJ takes nothing returns nothing
    if bj_isSinglePlayer then
        call PauseGame( false )
        // Bump the difficulty back up to the default.
        call SetGameDifficulty(GetDefaultDifficulty())
    endif

    call EndGame( bj_changeLevelShowScores )
endfunction
Если интересно, откуда все это берется, то нужно посмотреть устройство функции CustomVictoryBJ и все вызовы, следующие из нее.
Чтобы править проблему без создания костылей на кэше, то придется переписать близовскую функцию под себя (без сбрасывания сложности), а потом использовать ее вместо оригинальной в своей кампании (удобства ради можно использовать дефайн на cJass).
ответ
Возможно, эта статья пригодится.

23

» WarCraft 3 / Анимация

Похожие вопросы:

ответ
~8gabriel8:
В РО есть у юнита поля Бой - Атака1 - точка начала атаки/обратный ход броска или как-то так. Так вот это значения для вылета снаряда и момента нанесения урона.
По крайней мере для себя так запомнил в своё время, в действительности могут быть иные определения.
Вот тут нормальные определения:
ответ
~8gabriel8:
Вот есть вариант: xgm.guru/p/wc3/222019?postid=413030#comment28

23

» WarCraft 3 / Проверка карты с jass кодом

Похожие вопросы:

ответ
Объясню, почему я удалил код: после проведённого за кодом времени, я понял, что сильно погорячился, задав такой глупый вопрос. Стоило отдохнуть, проветрить голову, и решение нашлось. Тем, кто столкнулся с хоть самую малость, но похожей проблемой, дам совет: всегда проверяйте соответствия заклинаний, написанных в коде jass (CTRL + D, если кто не знает, как узнать id заклинания) и ,конечно, сам синтаксис. Также посоветую не утраивать "свалку" в коде, как это сделал я. В общем, если кому интересно, как я решил проблему, пишите - расскажу или даже помогу если у вас она схожая.(Всё дело во внимательности)...
Сброшу код триггера таким, каким я его хотел видеть изначально:
function MU_Check_lvl_four takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 4 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_three takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 3 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_two takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 2 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_one takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 1 ) ) then
        return false
    endif
    return true
endfunction

function MU_Second_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetEventDamageSource(), 'B008') == true ) ) then
        return false
    endif
    if ( not ( GetEventDamageSource() == udg_Akame_Killer ) ) then
        return false
    endif
    return true
endfunction

function MU_Start_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetAttacker(), 'B008') == true ) ) then
        return false
    endif
    if ( not ( GetAttacker() == udg_Akame_Killer ) ) then
        return false
    endif
    return true
endfunction

function Trig_MU_Conditions takes nothing returns boolean
    if ( not MU_Start_Conditions() ) then
        return false
    endif
    return true
endfunction

function MU_Venum_Check takes nothing returns boolean
    if ( not ( udg_MU_Venum_counter == 2 ) ) then
        return false
    endif
    return true
endfunction

function MU_del takes nothing returns nothing 
    if ( MU_Check_lvl_one() ) then
        call SetPlayerAbilityAvailableBJ( true, 'A00X', GetOwningPlayer(GetEventDamageSource()) )
        call UnitRemoveAbilityBJ( 'A00X', GetEventDamageSource() )
    else
        if ( MU_Check_lvl_two() ) then
            call SetPlayerAbilityAvailableBJ( true, 'A00U', GetOwningPlayer(GetEventDamageSource()) )
            call UnitRemoveAbilityBJ( 'A00U', GetEventDamageSource() )
        else
            if ( MU_Check_lvl_three() ) then
                call SetPlayerAbilityAvailableBJ( true, 'A00Y', GetOwningPlayer(GetEventDamageSource()) )
                call UnitRemoveAbilityBJ( 'A00Y', GetEventDamageSource() )
            else
                if ( MU_Check_lvl_four() ) then
                    call SetPlayerAbilityAvailableBJ( true, 'A013', GetOwningPlayer(GetEventDamageSource()) )
                    call UnitRemoveAbilityBJ( 'A013', GetEventDamageSource() )
                else
                    call DoNothing(  )
                endif
            endif
        endif
    endif
endfunction


function Trig_MU_Actions takes nothing returns nothing
    call DestroyTrigger(udg_MU_trig)
    set udg_MU_Venum_counter = GetRandomInt(1, 5)
    set udg_MU_TG = GetAttackedUnitBJ()
    if ( MU_Venum_Check() ) then
        if ( MU_Check_lvl_one() ) then
        call UnitAddAbilityBJ( 'A00X', udg_Akame_Killer )
        call SetPlayerAbilityAvailableBJ( false, 'A00X', GetOwningPlayer(udg_Akame_Killer) )
    else
        if ( MU_Check_lvl_two() ) then
            call UnitAddAbilityBJ( 'A00U', udg_Akame_Killer )
            call SetPlayerAbilityAvailableBJ( false, 'A00U', GetOwningPlayer(udg_Akame_Killer) )
        else
            if ( MU_Check_lvl_three() ) then
                call UnitAddAbilityBJ( 'A00Y', udg_Akame_Killer )
                call SetPlayerAbilityAvailableBJ( false, 'A00Y', GetOwningPlayer(udg_Akame_Killer) )
            else
                if ( MU_Check_lvl_four() ) then
                    call UnitAddAbilityBJ( 'A013', udg_Akame_Killer )
                    call SetPlayerAbilityAvailableBJ( false, 'A013', GetOwningPlayer(udg_Akame_Killer) )
                else
                    call DoNothing(  )
                endif
            endif
        endif
    endif
    set udg_MU_trig = CreateTrigger()
    call TriggerRegisterUnitEvent( udg_MU_trig, udg_MU_TG, EVENT_UNIT_DAMAGED )
    call TriggerAddCondition( udg_MU_trig, Condition( function MU_Second_Conditions ) )
    call TriggerAddAction( udg_MU_trig, function MU_del )
    else
        call DoNothing(  )
    endif
endfunction

//===========================================================================
function InitTrig_MU takes nothing returns nothing
    set gg_trg_MU = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MU, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_MU, Condition( function Trig_MU_Conditions ) )
    call TriggerAddAction( gg_trg_MU, function Trig_MU_Actions )
endfunction
Суть триггера:
Имеется способность с четырьмя уровнями. На каждом уровне урон способности разный, а шанс срабатывания всегда 25%. При атаке герой, имеющий такую способность имеет шанс (25%) на отравление противника.
Переменная udg_Akame_killer равносильна GetEventDamageSource()
P.S. Возможно кому-то даже пригодится этот код... Сделан полнейшим неумехой в плане jass, так что не судите строго!
ответ
Вобщем озарение как всегда пришло внезапно - понял что GetSpellAbilityUnit срабатывает на дамми и записывает в массив его, а не цель щита. Просто передвинул махинации с дамми в конец функции Actions. Всё отменно работает. Всем спасибо все свободны
ответ
Кириллицы в пути к JNGP или к карте нету?
ответ
function IsAbilityOnCooldown takes integer a returns boolean
	return IsFlagBitSet(RMem(a+0x20),512)
endfunction

function StartAbilityCooldownFxByAddress takes integer pAbility, real cd returns boolean
	if pAbility < 1 then
		return false
	endif
	set Memory[pReserverdIntArg1 / 4] = mR2I(cd)
	call CallThisCallWith2Args( RMem(RMem(pAbility)+0x3A4) , pAbility, pReserverdIntArg1 )//pStartAbilityCD
	return IsAbilityOnCooldown( pAbility )
endfunction

function StartAbilityCooldownFx takes unit whichUnit, integer abilityId, real cd returns boolean
	local integer pAbility = 0
	if GetUnitAbilityLevel( whichUnit, abilityId  ) == 0 or cd == 0.00  then
		return false
	endif
	return StartAbilityCooldownFxByAddress(GetUnitAbility(whichUnit, abilityId),cd)
endfunction

23

» WarCraft 3 / Способность стаки от атак!

Похожие вопросы:

ответ
Например так, чтобы основная химера не имела яда вообще, а яд накладывали даммики, вот и получится тоже самое (в самых малых требованиях)

23

» WarCraft 3 / Как сделать, чтобы герои получали опыт не на всей карте?

Принятый ответ
Похожие вопросы:

ответ
Наилучший вариант - писать свою систему опыта.
Еще можешь попробовать отключить общее распределение опыта.
Либо, вот так
Либо, так распределение опыта варкрафт
Либо, так: распределение опыта варкрафт
А еще, вот так: распределение опыта